import Vue from "vue";
import {Notification} from 'element-ui';
import request from "../src/router/axios"

/**
 * 设置 全局请求方法
 * */
Vue.prototype.$request = (params) => {
    return request(params)
}

/**
 * 设置列表上方查询
 * */
Vue.prototype.setSearchForm = (column) => {
    let form = {}
    column.forEach(item => {
        if (item.msSearch) {
            form[item.prop] = item.type === "checkbox" ? [] : ""
        }
    })
    return form;
}

/**
 * 深拷贝
 * */
Vue.prototype.deepCopy = (obj) => {
    function deepCopy(obj) {
        // 如果传入的不是对象类型，则直接返回
        if (typeof obj !== 'object' || obj === null) {
            return obj;
        }

        // 定义一个返回的变量
        let copy = {};

        // 判断传入的对象是数组还是对象
        if (obj.constructor === Array) {
            copy = [];
        }
        // 遍历对象的属性
        for (let key in obj) {
            // 判断对象是否有该属性
            if (obj.hasOwnProperty(key)) {
                // 如果该属性是对象类型，则递归调用该函数
                if (typeof obj[key] === 'object' && obj[key] !== null) {
                    copy[key] = deepCopy(obj[key]);
                } else {
                    // 否则，直接复制属性值
                    copy[key] = obj[key];
                }
            }
        }
        return copy;
    }

    return deepCopy(obj)
}

/**
 * el-drawer 拖拽指令
 */
Vue.directive('el-drawer-drag-width', {
    bind(el, binding, vnode, oldVnode) {
        const drawerEle = el.querySelector('.ms-drawer')
        // 创建触发拖拽的元素
        const dragItem = document.createElement('div')
        dragItem.className = "drag-box";
        // 将元素放置到抽屉的左边边缘
        dragItem.style.cssText = 'height: 100%;width: 10px;cursor: w-resize;position: absolute;left: 0;'
        drawerEle.append(dragItem)

        dragItem.onmousedown = (downEvent) => {
            // 拖拽时禁用文本选中
            document.body.style.userSelect = 'none'
            document.onmousemove = function (moveEvent) {
                // 获取鼠标距离浏览器右边缘的距离
                let realWidth = document.body.clientWidth - moveEvent.pageX
                const width40 = document.body.clientWidth * 0.4
                const width80 = document.body.clientWidth * 0.8
                // 宽度不能大于浏览器宽度 80%，不能小于宽度的 40%
                realWidth = realWidth > width80 ? width80 : realWidth < width40 ? width40 : realWidth
                drawerEle.style.width = realWidth + 'px'
            }
            document.onmouseup = function (e) {
                // 拖拽时结束时，取消禁用文本选中
                document.body.style.userSelect = 'initial'
                document.onmousemove = null
                document.onmouseup = null
            }
        }
    }
})


/**
 * 生成唯一id
 * len 机器码有多少位
 * */
Vue.prototype.getOnlyId = (len = 13) => {
    let date = (new Date()).valueOf();//获取时间戳
    let txt = '1234567890';//生成的随机机器码
    let pwd = '';//定义空变量用来接收机器码
    for (let i = 0; i < len; i++) {
        pwd += txt.charAt(Math.floor(Math.random() * txt.length));//循环机器码位数随机填充
    }
    return date + pwd;//相加生成唯一ID
};

/**
 * Notification 通知
 * */
Vue.prototype.$notify = options => {
    Notification(options)
};

/**
 * 判断内容是否为json
 * */

Vue.prototype.isJSON = (str) => {
    try {
        JSON.parse(str);
    } catch (e) {
        return false;
    }
    return true;
}


// 检测是否有权限
// 使用Vue.directive声明自定义指令permission
// v-permission="'sourceOfP:use'"
Vue.directive('permission', {
    inserted(el, binding, vnode) {
        // console.log(el.localName, binding, vnode)
        const permission = binding.value
        const result = havePermission(permission)
        const tagName = el.localName
        if (!result) {
            // switch (tagName) {
            //   case 'button': // 按钮权限控制-删除tag
            //     el.remove()
            //     break
            //   case 'div':
            //     el.remove()
            //     break
            //   case 'span':
            //     el.remove()
            //     break
            //     case 'img':
            //       el.remove()
            //       break
            // }
            el.remove()
        }
    }
})

